package com.ictest.detectionflow.mobile;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

import com.ictest.detectionflow.mobile.model.MenuSetting;

public class MainActivity extends Activity
{
	/**
	 * 日志标记。
	 */
	private final static String LOG_TAG = "MainActivity";

	/**
	 * 登陆活动编号。
	 */
	public final static int CODE_LOGIN = 300;

	/**
	 * 元器件活动编号。
	 */
	public final static int CODE_COMPONENT = 400;

	/**
	 * 清单活动编号。
	 */
	public final static int CODE_MANIFEST = 500;

	/**
	 * 设置活动编号。
	 */
	public final static int CODE_SETTING = 600;

	/**
	 * 同步活动编号。
	 */
	public final static int CODE_SYNC = 700;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		// 调用基类实现
		super.onCreate(savedInstanceState);

		// 设置内容视图
		setContentView(R.layout.activity_main);

		// 获得首页按钮
		ImageButton cmdLogin = (ImageButton) this.findViewById(R.id.cmdLogin);

		// 挂接点击事件监听
		cmdLogin.setOnClickListener(new View.OnClickListener()
		{
			// 处理点击事件
			public void onClick(View v)
			{
				// 导航到登陆页面
				Utility.startActivityForResult(MainActivity.this, LoginActivity.class, null, CODE_LOGIN);
			}
		});

		// 获得菜单表格视图
		GridView gridMenu = (GridView) this.findViewById(R.id.gridMenu);

		// 菜单数据
		ArrayList<MenuSetting> lstMenus = new ArrayList<MenuSetting>();

		// 创建元器件信息菜单
		MenuSetting menu = new MenuSetting();

		// 设置属性
		menu.setID(R.string.menu_component);
		menu.setName("Component");
		menu.setCaption(this.getString(R.string.menu_component));
		menu.setActivity(ComponentActivity.class);
		menu.setIcon(R.drawable.menu_component);
		menu.setRequestCode(CODE_COMPONENT);

		// 添加菜单
		lstMenus.add(menu);

		// 创建清单信息菜单
		menu = new MenuSetting();

		// 设置属性
		menu.setID(R.string.menu_manifest);
		menu.setName("Manifest");
		menu.setCaption(this.getString(R.string.menu_manifest));
		menu.setActivity(ManifestActivity.class);
		menu.setIcon(R.drawable.menu_manifest);
		menu.setRequestCode(CODE_MANIFEST);

		// 添加菜单
		lstMenus.add(menu);

		// 创建设置信息菜单
		menu = new MenuSetting();

		// 设置属性
		menu.setID(R.string.menu_setting);
		menu.setName("Setting");
		menu.setCaption(this.getString(R.string.menu_setting));
		menu.setActivity(SettingActivity.class);
		menu.setIcon(R.drawable.menu_setting);
		menu.setRequestCode(CODE_SETTING);

		// 添加菜单
		lstMenus.add(menu);

		// 创建登陆信息菜单
		menu = new MenuSetting();

		// 设置属性
		menu.setID(R.string.menu_login);
		menu.setName("Login");
		menu.setCaption(this.getString(R.string.menu_login));
		menu.setActivity(LoginActivity.class);
		menu.setIcon(R.drawable.menu_login);
		menu.setRequestCode(CODE_LOGIN);

		// 添加菜单
		lstMenus.add(menu);

		// 创建数据同步菜单
		menu = new MenuSetting();

		// 设置属性
		menu.setID(R.string.menu_sync_component);
		menu.setName("SyncComponent");
		menu.setCaption(this.getString(R.string.menu_sync_component));
		menu.setIcon(R.drawable.menu_sync_component);
		menu.setRequestCode(CODE_SYNC);

		// 添加菜单
		lstMenus.add(menu);

		// 创建数据同步菜单
		menu = new MenuSetting();

		// 设置属性
		menu.setID(R.string.menu_sync_customer);
		menu.setName("SyncCustomer");
		menu.setCaption(this.getString(R.string.menu_sync_customer));
		menu.setIcon(R.drawable.menu_sync_customer);
		menu.setRequestCode(CODE_SYNC);

		// 添加菜单
		lstMenus.add(menu);

		// 创建适配器
		MenusAdapter menusAdapter = new MenusAdapter(lstMenus);

		// 添加适配器
		gridMenu.setAdapter(menusAdapter);

		// 挂接 项目点击事件监听
		gridMenu.setOnItemClickListener(new OnItemClickListener()
		{
			// 处理点击事件
			public void onItemClick(AdapterView<?> adapter, View view, int position, long row)
			{
				// 获得菜单项目
				MenuSetting setting = (MenuSetting) adapter.getItemAtPosition(position);

				// 判断是否为清单菜单
				if (setting.getID() == R.string.menu_manifest)
				{
					// 判断是否登录
					if (Utility.IsNullOrEmpty(LoginActivity.SESSION_ID))
					{
						// 提示信息
						Utility.notifyLogin(MainActivity.this);

						// 返回
						return;
					}
					// 判断是否设定了服务器地址
					else if (!Utility.hasServiceAddress(MainActivity.this))
					{
						// 提示消息
						Utility.notifySetServiceAddress(MainActivity.this);

						// 返回
						return;
					}
				}

				// 判断是否为登陆菜单
				if (setting.getID() == R.string.menu_login)
				{
					// 判断是否设定了服务器地址
					if (!Utility.hasServiceAddress(MainActivity.this))
					{
						// 提示消息
						Utility.notifySetServiceAddress(MainActivity.this);

						// 返回
						return;
					}
				}

				// 判断是否为同步元器件菜单
				if (setting.getID() == R.string.menu_sync_component)
				{
					// 判断是否登录
					if (Utility.IsNullOrEmpty(LoginActivity.SESSION_ID))
					{
						// 提示信息
						Utility.notifyLogin(MainActivity.this);

						// 返回
						return;
					}
					// 判断是否设定了服务器地址
					else if (!Utility.hasServiceAddress(MainActivity.this))
					{
						// 提示消息
						Utility.notifySetServiceAddress(MainActivity.this);

						// 返回
						return;
					}
					else
					{
						// 创建同步任务
						ComponentActivity.SyncTask task = new ComponentActivity.SyncTask(MainActivity.this, null);

						// 启用同步任务
						task.execute();
					}
				}

				// 判断是否为同步客户菜单
				if (setting.getID() == R.string.menu_sync_customer)
				{
					// 判断是否登录
					if (Utility.IsNullOrEmpty(LoginActivity.SESSION_ID))
					{
						// 提示信息
						Utility.notifyLogin(MainActivity.this);

						// 返回
						return;
					}
					// 判断是否设定了服务器地址
					else if (!Utility.hasServiceAddress(MainActivity.this))
					{
						// 提示消息
						Utility.notifySetServiceAddress(MainActivity.this);

						// 返回
						return;
					}
					else
					{
						// 创建同步任务
						ManifestActivity.SyncTask task = new ManifestActivity.SyncTask(MainActivity.this, null);

						// 启用同步任务
						task.execute();
					}
				}

				// 判断是否有菜单设置
				if (null != setting && null != setting.getActivity())
				{
					// 执行导航
					Utility.startActivityForResult(MainActivity.this, setting.getActivity(), null, setting.getRequestCode());
				}
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu)
	{
		try
		{
			// 获得菜单对象
			getMenuInflater().inflate(R.menu.activity_main, menu);

			// 挂接事件

			// 返回成功
			return true;
		}
		catch (Exception ex)
		{
			// 记录日志
			Log.e(LOG_TAG, "加载菜单的过程中发生错误。\r\n" + ex.toString());

			// 返回失败
			return false;
		}
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item)
	{
		// 根据选中的菜单项目进行处理
		switch (item.getItemId())
		{
		case R.id.menu_setting:
			// 导航到设定页面
			Utility.startActivity(MainActivity.this, SettingActivity.class, null);
			// 终止
			break;
		case R.id.menu_login:
			// 导航到登陆页面
			Utility.startActivityForResult(MainActivity.this, LoginActivity.class, null, CODE_LOGIN);
			// 终止
			break;
		}

		// 返回成功
		return true;
	}

	/**
	 * 菜单适配器。
	 */
	private class MenusAdapter extends BaseAdapter
	{
		/**
		 * 菜单设定。
		 */
		private final List<MenuSetting> m_Settings;

		/**
		 * 布局对象。
		 */
		private final LayoutInflater m_Inflater;

		/**
		 * 初始化菜单数据适配器。
		 * 
		 * @param settings
		 *            菜单数据。
		 */
		public MenusAdapter(List<MenuSetting> settings)
		{
			// 保存数据
			this.m_Settings = settings;

			// 获得布局对象
			this.m_Inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		}

		public int getCount()
		{
			// 判断是否设置了菜单数据
			if (null == this.m_Settings)
			{
				// 没有数据，则返回0
				return 0;
			}

			// 返回菜单数目
			return this.m_Settings.size();
		}

		public Object getItem(int position)
		{
			// 判断是否设置了菜单数据
			if (null == this.m_Settings)
			{
				// 没有数据，则返回空引用
				return null;
			}

			// 返回菜单数目
			return this.m_Settings.get(position);
		}

		public long getItemId(int position)
		{
			// 返回位置
			return position;
		}

		public View getView(int position, View convertView, ViewGroup parent)
		{
			// 判断视图是否创建
			if (null == convertView)
			{
				// 创建项目视图
				convertView = this.m_Inflater.inflate(R.layout.menu_item, null);
			}

			// 获得菜单设置
			MenuSetting setting = this.m_Settings.get(position);

			// 获得图标控件
			ImageView imgMenu = (ImageView) convertView.findViewById(R.id.imgMenu);

			// 获得图标
			Drawable icon = getResources().getDrawable(setting.getIcon());

			// 设置图片
			imgMenu.setImageDrawable(icon);
			imgMenu.setContentDescription(setting.getCaption());

			// 获得标题控件
			TextView txtMenu = (TextView) convertView.findViewById(R.id.txtMenu);

			// 设置标题
			txtMenu.setText(setting.getCaption());

			// 返回视图
			return convertView;
		}
	}
}